/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.ddakji;

import java.io.IOException;
import android.annotation.TargetApi;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.Intent;
import android.hardware.Camera;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.Vibrator;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.view.animation.DecelerateInterpolator;
import android.view.inputmethod.EditorInfo;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewSwitcher;

/**
 * This is the main Activity that displays the current chat session.
 */
public class BluetoothChat extends Activity implements SensorEventListener{ 
	/*//////////////////////////
///////20120204/////////
/////Shim sang woo/////
////////G-sensor/////////
	 *///////////////////////////	  
	int index = 0;
	Vibrator vibrator;
	Sensor_V sens_V = new Sensor_V();
	
	private static final int SHAKE_THRESHOLD = 800; 
	@SuppressWarnings("deprecation")
	private static final int DATA_X = SensorManager.DATA_X; 
	@SuppressWarnings("deprecation")
	private static final int DATA_Y = SensorManager.DATA_Y; 
	@SuppressWarnings("deprecation")
	private static final int DATA_Z = SensorManager.DATA_Z; 

	private SensorManager sensorManager; 
	private Sensor accelerormeterSensor;

	boolean cap = false;
	boolean attack_yn=false;

	public static String IMAGE_FILE = "capture.jpg";

	CameraSurfaceView cameraView;

	//TextView text1, text2, text3;

	/*//////////////////////////
///////20120204/////////
/////Shim sang woo/////
////////G-sensor/////////
	 *///////////////////////////	  

	ImageSwitcher switcher; 
	Handler iHandler = new Handler();
	ImageThread thread; //������ �ִϸ��̼��� ������ ������


	Animation_Class animation_class = new Animation_Class();

	Animation_V ani_V = new Animation_V();


	// Debugging
	private static final String TAG = "BluetoothChat";
	private static final boolean D = true;

	// Message types sent from the BluetoothChatService Handler
	public static final int MESSAGE_STATE_CHANGE = 1;
	public static final int MESSAGE_READ = 2;
	public static final int MESSAGE_WRITE = 3;
	public static final int MESSAGE_DEVICE_NAME = 4;
	public static final int MESSAGE_TOAST = 5;

	// Key names received from the BluetoothChatService Handler
	public static final String DEVICE_NAME = "device_name";
	public static final String TOAST = "toast";

	// Intent request codes
	private static final int REQUEST_CONNECT_DEVICE_SECURE = 1;
	private static final int REQUEST_CONNECT_DEVICE_INSECURE = 2;
	private static final int REQUEST_ENABLE_BT = 3;

	// Layout Views
	private TextView mTitle;
	private ListView mConversationView;
	private EditText mOutEditText;
	private Button mSendButton, button1;

	// Name of the connected device
	private String mConnectedDeviceName = null;
	// Array adapter for the conversation thread
	private ArrayAdapter<String> mConversationArrayAdapter;
	// String buffer for outgoing messages
	private StringBuffer mOutStringBuffer;
	// Local Bluetooth adapter
	private BluetoothAdapter mBluetoothAdapter = null;
	// Member object for the chat services
	private BluetoothChatService mChatService = null;


	@TargetApi(5)
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		if(D) Log.e(TAG, "+++ ON CREATE +++");

		// Set up the window layout
		requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
		setContentView(R.layout.main);
		getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title);

		// Set up the custom title
		mTitle = (TextView) findViewById(R.id.title_left_text);
		mTitle.setText(R.string.app_name);
		mTitle = (TextView) findViewById(R.id.title_right_text);

		button1 = (Button) findViewById(R.id.button1);
		button1.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				String message = "true";
				sendMessage(message);
				attack_yn=true;
				button1.setVisibility(View.INVISIBLE);
			}
		});
		// Get local Bluetooth adapter
		mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

		// If the adapter is null, then Bluetooth is not supported
		if (mBluetoothAdapter == null) {
			Toast.makeText(this, "������� ���Ұ�", Toast.LENGTH_LONG).show();
			finish();
			return;
		}

		/*//////////////////////////
  ///////20120204/////////
  /////Shim sang woo/////
  ////////G-sensor/////////
		 *///////////////////////////	  
		vibrator = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);	//진동?�용

		sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
		accelerormeterSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

		// text1 = (TextView)findViewById(R.id.textView1);
		// text2 = (TextView)findViewById(R.id.textView2);
		//text3 = (TextView)findViewById(R.id.textView3);
		/*//////////////////////////
  ///////20120204/////////
  /////Shim sang woo/////
  ////////G-sensor/////////
		 *///////////////////////////	


		/* ��ġ�� �ִϸ��̼� 13-02-04
		 * START ��ư�� ������ �ΰ��� ����� �ִϸ��̼� (������, Ʈ��)�� ���ÿ� ���۽�Ű�� ���ÿ� �����Ų��*/
		switcher = (ImageSwitcher) findViewById(R.id.switcher);
		switcher.setVisibility(View.VISIBLE);

		switcher.setFactory(new ViewSwitcher.ViewFactory(){
			@SuppressWarnings("deprecation")
			public View makeView() {
				ImageView imageView = new ImageView(getApplicationContext());
				//imageView.setBackgroundColor(0xFF000000);
				imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
				imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
						LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
				return imageView;
			}
		});

		switcher.setImageResource(R.drawable.ndak1); //ùȭ�鿡 ���� ù������ �����

		/* ��ġ�� �ִϸ��̼� 13-02-04
		 * START ��ư�� ������ �ΰ��� ����� �ִϸ��̼� (������, Ʈ��)�� ���ÿ� ���۽�Ű�� ���ÿ� �����Ų��*/




	}

	@TargetApi(5)
	@Override
	public void onStart() {
		super.onStart();
		
		if(D) Log.e(TAG, "++ ON START ++");
		/*//////////////////////////
  ///////20120204/////////
  /////Shim sang woo/////
  ////////G-sensor/////////
		 *///////////////////////////	
		if (accelerormeterSensor != null) 
			sensorManager.registerListener(this, accelerormeterSensor, 
					SensorManager.SENSOR_DELAY_GAME); 
		/*//////////////////////////
  ///////20120204/////////
  /////Shim sang woo/////
  ////////G-sensor/////////
		 *///////////////////////////	
		// If BT is not on, request that it be enabled.
		// setupChat() will then be called during onActivityResult
		if (!mBluetoothAdapter.isEnabled()) {
			Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
			startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
			// Otherwise, setup the chat session
		} else {
			if (mChatService == null) setupChat();
		}
	}

	@Override
	public synchronized void onResume() {
		super.onResume();
		if(D) Log.e(TAG, "+ ON RESUME +");

		// Performing this check in onResume() covers the case in which BT was
		// not enabled during onStart(), so we were paused to enable it...
		// onResume() will be called when ACTION_REQUEST_ENABLE activity returns.
		if (mChatService != null) {
			// Only if the state is STATE_NONE, do we know that we haven't started already
			if (mChatService.getState() == BluetoothChatService.STATE_NONE) {
				// Start the Bluetooth chat services
				mChatService.start();
			}
		}
	}

	@TargetApi(3)
	private void setupChat() {
		Log.d(TAG, "setupChat()");

		// Initialize the array adapter for the conversation thread
		mConversationArrayAdapter = new ArrayAdapter<String>(this, R.layout.message);
		mConversationView = (ListView) findViewById(R.id.in);
		mConversationView.setAdapter(mConversationArrayAdapter);

		// Initialize the compose field with a listener for the return key
		mOutEditText = (EditText) findViewById(R.id.edit_text_out);
		mOutEditText.setOnEditorActionListener(mWriteListener);

		// Initialize the send button with a listener that for click events
		mSendButton = (Button) findViewById(R.id.button_send);
		mSendButton.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				// Send a message using content of the edit text widget
				TextView view = (TextView) findViewById(R.id.edit_text_out);
				String message = view.getText().toString();
				sendMessage(message);
			}
		});

		// Initialize the BluetoothChatService to perform bluetooth connections
		Log.i("abdf", "테스트테스트7");
		mChatService = new BluetoothChatService(this, mHandler);

		Log.i("abdf", "테스트테스트8");
		// Initialize the buffer for outgoing messages
		mOutStringBuffer = new StringBuffer("");
		Log.i("abdf", "테스트테스트9");
	}

	@Override
	public synchronized void onPause() {
		super.onPause();
		if(D) Log.e(TAG, "- ON PAUSE -");
	}

	@Override
	public void onStop() {
		super.onStop();
		if(D) Log.e(TAG, "-- ON STOP --");
		/*//////////////////////////
  ///////20120204/////////
  /////Shim sang woo/////
  ////////G-sensor/////////
		 *///////////////////////////	
		if (sensorManager != null) 
			sensorManager.unregisterListener(this); 
		/*//////////////////////////
  ///////20120204/////////
  /////Shim sang woo/////
  ////////G-sensor/////////
		 *///////////////////////////	
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		// Stop the Bluetooth chat services
		if (mChatService != null) mChatService.stop();
		if(D) Log.e(TAG, "--- ON DESTROY ---");
	}

	@TargetApi(5)
	private void ensureDiscoverable() {
		if(D) Log.d(TAG, "ensure discoverable");
		if (mBluetoothAdapter.getScanMode() !=
				BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
			Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
			discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
			startActivity(discoverableIntent);
		}
	}

	/**
	 * Sends a message.
	 * @param message  A string of text to send.
	 */
	private void sendMessage(String message) {
		// Check that we're actually connected before trying anything
		if (mChatService.getState() != BluetoothChatService.STATE_CONNECTED) {
			Toast.makeText(this, R.string.not_connected, Toast.LENGTH_SHORT).show();
			return;
		}

		// Check that there's actually something to send
		if (message.length() > 0) {
			// Get the message bytes and tell the BluetoothChatService to write
			byte[] send = message.getBytes();
			mChatService.write(send);

			// Reset out string buffer to zero and clear the edit text field
			mOutStringBuffer.setLength(0);
			mOutEditText.setText(mOutStringBuffer);
		}
	}

	// The action listener for the EditText widget, to listen for the return key
	private TextView.OnEditorActionListener mWriteListener =
			new TextView.OnEditorActionListener() {
		public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
			// If the action is a key-up event on the return key, send the message
			if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_UP) {
				String message = view.getText().toString();
				sendMessage(message);
			}
			if(D) Log.i(TAG, "END onEditorAction");
			return true;
		}
	};

	// The Handler that gets information back from the BluetoothChatService
	private final Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case MESSAGE_STATE_CHANGE:
				if(D) Log.i(TAG, "MESSAGE_STATE_CHANGE: " + msg.arg1);
				switch (msg.arg1) {
				case BluetoothChatService.STATE_CONNECTED:
					mTitle.setText(R.string.title_connected_to);
					mTitle.append(mConnectedDeviceName);
					mConversationArrayAdapter.clear();
					break;
				case BluetoothChatService.STATE_CONNECTING:
					mTitle.setText(R.string.title_connecting);
					break;
				case BluetoothChatService.STATE_LISTEN:
				case BluetoothChatService.STATE_NONE:
					mTitle.setText(R.string.title_not_connected);
					break;
				}
				break;
			case MESSAGE_WRITE:
				Log.i("abdf", "테스트테스트");
				byte[] writeBuf = (byte[]) msg.obj;
				// construct a string from the buffer
				String writeMessage = new String(writeBuf);
				mConversationArrayAdapter.add("나:  " + writeMessage);
				Log.i("abdf", "테스트테스트1");
				if(!writeMessage.equals("true")){
					Log.i("abdf", "테스트테스트2");
					if(!ani_V.iswToken()){
						Log.i("abdf", "테스트테스트3");
						Click_Event();	
						Log.i("abdf", "테스트테스트4");
					}
					Log.i("abdf", "테스트테스트5");
				}
				Log.i("abdf", "테스트테스트6");
				break;
			case MESSAGE_READ:

				byte[] readBuf = (byte[]) msg.obj;
				// construct a string from the valid bytes in the buffer
				String readMessage = new String(readBuf, 0, msg.arg1);
				mConversationArrayAdapter.add(mConnectedDeviceName+":  " + readMessage);
				attack_yn=true;
				if(readMessage.equals("true")){
					attack_yn=false;
					button1.setVisibility(View.INVISIBLE);
				}else{
					Click_Event();
				}
				break;
			case MESSAGE_DEVICE_NAME:
				// save the connected device's name
				mConnectedDeviceName = msg.getData().getString(DEVICE_NAME);
				Toast.makeText(getApplicationContext(), "Connected to "
						+ mConnectedDeviceName, Toast.LENGTH_SHORT).show();
				break;
			case MESSAGE_TOAST:
				Toast.makeText(getApplicationContext(), msg.getData().getString(TOAST),
						Toast.LENGTH_SHORT).show();
				break;
			}
		}
	};

	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		if(D) Log.d(TAG, "onActivityResult " + resultCode);
		switch (requestCode) {
		case REQUEST_CONNECT_DEVICE_SECURE:
			// When DeviceListActivity returns with a device to connect
			if (resultCode == Activity.RESULT_OK) {
				connectDevice(data, true);
			}
			break;
		case REQUEST_CONNECT_DEVICE_INSECURE:
			// When DeviceListActivity returns with a device to connect
			if (resultCode == Activity.RESULT_OK) {
				connectDevice(data, false);
			}
			break;
		case REQUEST_ENABLE_BT:
			// When the request to enable Bluetooth returns
			if (resultCode == Activity.RESULT_OK) {
				// Bluetooth is now enabled, so set up a chat session
				setupChat();
			} else {
				// User did not enable Bluetooth or an error occured
				Log.d(TAG, "BT not enabled");
				Toast.makeText(this, R.string.bt_not_enabled_leaving, Toast.LENGTH_SHORT).show();
				finish();
			}
		}
	}

	@TargetApi(5)
	private void connectDevice(Intent data, boolean secure) {
		// Get the device MAC address
		String address = data.getExtras()
				.getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
		// Get the BLuetoothDevice object
		BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
		// Attempt to connect to the device
		mChatService.connect(device, secure);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
		inflater.inflate(R.menu.option_menu, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Intent serverIntent = null;
		switch (item.getItemId()) {
		case R.id.secure_connect_scan:
			// Launch the DeviceListActivity to see devices and do scan
			serverIntent = new Intent(this, DeviceListActivity.class);
			startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_SECURE);
			return true;
		case R.id.insecure_connect_scan:
			// Launch the DeviceListActivity to see devices and do scan
			serverIntent = new Intent(this, DeviceListActivity.class);
			startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_INSECURE);
			return true;
		case R.id.discoverable:
			// Ensure this device is discoverable by others
			ensureDiscoverable();
			return true;
		}
		return false;
	}

	/*//////////////////////////
///////20120204/////////
/////Shim sang woo/////
////////G-sensor/////////
	 *///////////////////////////	
	@Override 
	public void onAccuracyChanged(Sensor sensor, int accuracy) { 
	} 


	@SuppressWarnings("deprecation")
	@Override 
	public void onSensorChanged(SensorEvent event) { 

		if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
			long currentTime = System.currentTimeMillis(); 
			long gabOfTime = (currentTime - sens_V.getLastTime()); 

			sens_V.setX(event.values[SensorManager.DATA_X]); 
			sens_V.setY(event.values[SensorManager.DATA_Y]); 
			sens_V.setZ(event.values[SensorManager.DATA_Z]); 
			sens_V.setSpeed(Math.abs(sens_V.getX() + sens_V.getY() + sens_V.getZ() - sens_V.getLastX() - sens_V.getLastY() - sens_V.getLastZ()) / gabOfTime * 10000);

			//text1.setText(""+x);///
			//text2.setText(""+y);
			//text3.setText(""+z);
			if (gabOfTime > 90&&sens_V.getZ()>7&&attack_yn) {
				sens_V.setLastTime(currentTime); 
				if (sens_V.getSpeed() > SHAKE_THRESHOLD&& sens_V.getSpeed()> 2300) { 
					cap = true;
					Toast.makeText(getApplicationContext(),""+sens_V.getSpeed(),Toast.LENGTH_SHORT).show();	
					sens_V.setSpeedkeep(sens_V.getSpeed());
					//?�재 �?�� 빠�???메소???�행 => 멈춘 ???�행?�로 교체
				}
				else if(sens_V.getSpeed()<1300&&cap){
					//Long.parseLong(Float.toString(speed/10))
					cap=false;
					attack_yn=false;
					int speed2 = (int)sens_V.getSpeedkeep()/10;
					try {
						Thread.sleep(30);
						vibrator.vibrate((long)speed2);//?�깐 ?�린?? 
						sendMessage(""+speed2);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					/*
                	cameraView.capture(new Camera.PictureCallback() {
                        public void onPictureTaken(byte[] data, Camera camera) {

                            try {
                                Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                                String outUriStr = MediaStore.Images.Media.insertImage(getContentResolver(),bitmap, "Captured Image", "Captured Image using Camera.");

                                if (outUriStr == null) {
                                    Log.d("SampleCapture", "Image insert failed.");
                                    return;
                                } else {
                                    Uri outUri = Uri.parse(outUriStr);
                                    sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, outUri));
                                }
                                Toast.makeText(getApplicationContext(), "?�진촬영 ?�료", Toast.LENGTH_LONG).show();
                                camera.startPreview();
                            } catch (Exception e) {
                                Log.e("SampleCapture", "Failed to insert image.", e);
                            }
                        	camera.startPreview();
                        }
                    });*/
				}
				sens_V.setLastX(event.values[DATA_X]); 
				sens_V.setLastY(event.values[DATA_Y]); 
				sens_V.setLastZ(event.values[DATA_Z]); 
			} 
		} 
	}  

	public class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback{

		private SurfaceHolder mHolder;
		private Camera camera = null;

		@SuppressWarnings("deprecation")
		public CameraSurfaceView(Context context) {
			super(context);
			// TODO Auto-generated constructor stub

			mHolder = getHolder();
			mHolder.addCallback(this);
			mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		}

		@Override
		public void surfaceCreated(SurfaceHolder holder) {
			// TODO Auto-generated method stub
			camera = Camera.open();

			try {
				camera.setPreviewDisplay(mHolder);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		@Override
		public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
			// TODO Auto-generated method stub
			camera.startPreview();
		}

		@Override
		public void surfaceDestroyed(SurfaceHolder holder) {
			// TODO Auto-generated method stub
			camera.stopPreview();
			camera = null;
		}

		public boolean capture(Camera.PictureCallback handler){
			if(camera !=null){
				camera.takePicture(null, null, handler);
				return true;
			}else{
				return false;
			}
		}
	}
	/*//////////////////////////
///////20120204/////////
/////Shim sang woo/////
////////G-sensor/////////
	 *///////////////////////////	


	/* ��ġ�� �ִϸ��̼� 13-02-04
	 * START ��ư�� ������ �ΰ��� ����� �ִϸ��̼� (������, Ʈ��)�� ���ÿ� ���۽�Ű�� ���ÿ� �����Ų��*/

	private void Click_Event(){

		Animation anim_up = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scaleup);
		final Animation anim_down = AnimationUtils.loadAnimation(getApplicationContext(),R.anim.scaledown); //Ŀ���� �۾����� Ʈ�� �ִϸ��̼�
		anim_up.setInterpolator(new DecelerateInterpolator()); //Ʈ�� �ִϸ��̼� �ӵ� ����
		anim_down.setInterpolator(new AccelerateInterpolator());
		ani_V.setEnd(false); 
		startAnimation();	//������ �ִϸ��̼� ����

		switcher.startAnimation(anim_up); //Ŀ���� Ʈ��  �ִϸ��̼� ���� 
		anim_up.setAnimationListener(new AnimationListener(){

			public void onAnimationEnd(Animation _animation) {
				switcher.startAnimation(anim_down);	//Ŀ���� Ʈ�� �ִϸ��̼� �����ϸ� �۾����� Ʈ�� �ִϸ��̼� ����
			}
			public void onAnimationRepeat(Animation _animation) {		}
			public void onAnimationStart(Animation _animation) { 		}		
		});

	}
	private void startAnimation()	//������ �ִϸ��̼� ����
	{ 	index = 0;
		thread = new ImageThread();
		this.gameCheck(sens_V.getSpeedkeep());
		thread.start();	//������ ����
	}


	private void stopAnimation() //������ �ִϸ��̼� ����
	{
		ani_V.setRunning(false);
		ani_V.setwToken(WinLose());



		try {
			if(ani_V.iswToken()){
				sendMessage("1");
				//ani_V.setwToken(false);
			}else{
				thread.join(); //������ ������� ���
			}
		} catch(InterruptedException ex){}
		//switcher.setVisibility(View.INVISIBLE);
	}

	private boolean WinLose(){
		if(ani_V.getPastIndex() == ani_V.getCurrentIndex())
			return false;
		else return true;
	}

	class ImageThread extends Thread {

		float duration = 10; //ù ������ ���۰�

		final int imageId[] = { R.drawable.ndak1,
				R.drawable.ndak2,
				R.drawable.ndak3,
				R.drawable.ndak4,
				R.drawable.ndak5,
				R.drawable.ndak6,
				R.drawable.ndak7,
				R.drawable.ndak8,
				R.drawable.ndak9,
				R.drawable.ndak10,
				R.drawable.ndak11,
				R.drawable.ndak12,
				R.drawable.ndak13,
				R.drawable.ndak14,
				R.drawable.ndak15,
				R.drawable.ndak16,
				R.drawable.ndak17,
				R.drawable.ndak18,
				R.drawable.ndak19,
				R.drawable.ndak20}; //���� �ѹ��� ���� ������

				public void run(){
					ani_V.setRunning(true);
					ani_V.setPastIndex(ani_V.getCurrentIndex());
					
					while(ani_V.isRunning()) {
						synchronized(this){
							iHandler.post(new Runnable() {
								public void run(){

									switcher.setImageResource(imageId[ani_V.getCurrentIndex()]);
									duration += ani_V.getInDuration();
									if(index==ani_V.getAnimIndex())
			    						ani_V.setEnd(true);	
								}
							});
							if (ani_V.isEnd()== false)
								ani_V.setCurrentIndex(ani_V.getCurrentIndex()+1);
							else if(ani_V.isEnd()==true){
								if(ani_V.getCurrentIndex() == 0) stopAnimation();
								else if (ani_V.getCurrentIndex() == 10) stopAnimation();
								else if (((ani_V.getCurrentIndex()>0)&&(ani_V.getCurrentIndex()<6))||((ani_V.getCurrentIndex()>10)&&(ani_V.getCurrentIndex()<16)))
									ani_V.setCurrentIndex(ani_V.getCurrentIndex()-1);
								else ani_V.setCurrentIndex(ani_V.getCurrentIndex()+1);
							}
							index++;

							if(ani_V.getCurrentIndex() == imageId.length){
								ani_V.setCurrentIndex(0);
							}


							try {
								Thread.sleep((int)duration);
							} catch (InterruptedException ex){}




						}
					}
				}
	}
	
	void gameCheck(float power){
		ani_V.setDef((float)900);
		
		if(power<=200){
			if(power>=ani_V.getDef()){
			ani_V.setInDuration(3.5);
		    ani_V.setAnimIndex(52);
			}
			else{
			ani_V.setInDuration(2.5);
			ani_V.setAnimIndex(60);	
			}
		}

		else if((power>200)&&(power<=400)){
			if(power>=ani_V.getDef()){
			ani_V.setInDuration((double)2);
		    ani_V.setAnimIndex(70);
			}
			else{
			ani_V.setInDuration(2.5);
			ani_V.setAnimIndex(60);	
			}
		}
		
		else if((power>400)&&(power<=600)){
			if(power>=ani_V.getDef()){
			ani_V.setInDuration(1.5);
		    ani_V.setAnimIndex(73);
			}
			else{
			ani_V.setInDuration(1.5);
			ani_V.setAnimIndex(80);	
			}
		}
		
		else if((power>600)&&(power<=800)){
			if(power>=ani_V.getDef()){
			ani_V.setInDuration((double)1);
		    ani_V.setAnimIndex(92);
			}
			else{
			ani_V.setInDuration(0.8);
			ani_V.setAnimIndex(100);	
			}
			
		}
		
		else if(power>800){
			if(power>=ani_V.getDef()){
			ani_V.setInDuration(0.4);
		    ani_V.setAnimIndex(134);
			}
			else{
			ani_V.setInDuration(0.5);
			ani_V.setAnimIndex(122);	
			}
		}
	}
	/* ��ġ�� �ִϸ��̼� 13-02-04
	 * START ��ư�� ������ �ΰ��� ����� �ִϸ��̼� (������, Ʈ��)�� ���ÿ� ���۽�Ű�� ���ÿ� �����Ų��*/


}
